#include <QFile>
#include <QFileDialog>
#include <QMessageBox>
#include "cell_usrmgr.h"
#include "ui_cell_usrmgr.h"
#include "lib/sqlmgr.h"
#include "usrconfirm.h"

Cell_UsrMgr::Cell_UsrMgr(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Cell_UsrMgr)
{
    ui->setupUi(this);
    //初始化图表
    ui->tableView->setModel(&m_model);
    ui->tableView->setEditTriggers(QAbstractItemView::NoEditTriggers); //设置图表不可编辑
    ui->tableView->setSelectionBehavior(QAbstractItemView::SelectRows); //只允许选中行
    ui->tableView->setSelectionMode(QAbstractItemView::SingleSelection); //最多选中一行
}

Cell_UsrMgr::~Cell_UsrMgr()
{
    delete ui;
}

void Cell_UsrMgr::initPage(QString strCondition)
{
    //查询数据库并显示
    auto l = SqlMgr::getInstance()->getUser(strCondition);
    //将数据放入model以在界面中显示
    m_model.clear();
    m_model.setHorizontalHeaderLabels(QStringList{"用户id", "年级", "部门", "权限", "昵称", "密码", "用户名"});
    for(int i = 0; i < l.size(); ++i)
    {
        QList<QStandardItem*> items;
        for(int j = 0; j < l[i].size(); ++j) {
            items.append(new QStandardItem(l[i][j]));
        }
        m_model.appendRow((items));
    }
}

void Cell_UsrMgr::on_btn_del_clicked()
{
    //删除用户
    int r = ui->tableView->currentIndex().row(); //获取点击的所在行数
    if(r < 0) {
        QMessageBox::information(nullptr, "信息", "无选中用户!   ");
    }
    else
    {
        auto id = m_model.item(r, 0)->text(); //获取指定行数的信息
        //用户确认
        if(usrConfirm(DEL)) {
            SqlMgr::getInstance()->delUser(id); //在数据库中删除用户
            initPage(); //更新界面
        }
        else { return; }
    }
}

static QString convertUTF8(QString strGBK)
{
    std::string str = strGBK.toStdString();
    QString res = QString::fromUtf8(str.c_str());
    return res;
}

void Cell_UsrMgr::on_btn_import_clicked()
{
    //导入用户
    //获取文件路径
    auto strPath = QFileDialog::getOpenFileName(nullptr, "输入文件路径");
    if(!strPath.isEmpty())
    {
        //打开文件并进行读取
        QFile f(strPath);
        f.open(QFile::ReadOnly);
        QVector<QStringList> vecData;
        while(!f.atEnd())
        {
            QString str = f.readLine();
            //每块数据以,为分割
            auto l = str.split(",");
            //解决乱码问题 : GBK转utf8
            for(auto &itC : l) {
                itC = convertUTF8(itC);
            }
            //数据格式错误
            if(l.size() != 6)
            {
                QMessageBox::information(nullptr, "信息", "导入失败!   ");
                return;
            }
            //清除换行符
            l[l.size() - 1] = l[l.size() - 1].chopped(2);
            vecData.push_back(l);
        }
        //更新数据库
        SqlMgr::getInstance()->addUser(vecData);
        // ui->le_search->clear();
        initPage(); //更新界面
        QMessageBox::information(nullptr, "信息", "导入成功!   ");
    }
}

void Cell_UsrMgr::on_le_search_textChanged(const QString &arg1)
{
    //查找用户
    QString strCond = QString("WHERE usrname LIKE '%%1%'").arg(arg1);
    initPage(strCond); //更新界面
}

